左下角自定义箭头坐标轴 (批量添加和美化)
我要一台蓝色大大的飞机
1引言
前面讲到如何在 UMAP/t-SNE 聚类图左下角添加箭头坐标轴给了个示例,见 UMAP/t-SNE 左下角自定义箭头坐标轴 。
DimPlot 有时候经常会有多个样本整合分析,需要绘制多个这样的图形。 可视化多个基因的 FeaturePlot 如何添加?
再用上次推文的函数一个一个画那就太麻烦了,当然写个循环也不是不可以。这次重新改写函数,使其可以用于多个样本的 DimPlot 和多个基因的 FeaturePlot。
此外在 Y 叔 的批评指导下, 靠近 最少墨水原则, 我们可以在多个分组图的左下角只需要添加一个坐标轴即可,简化过多的坐标轴干扰。
2加载数据
这里提取 4 个数据进行测试:
library(patchwork)
library(Seurat)
library(ggplot2)
library(data.table)
library(tidyverse)
library(ggsci)
library(patchwork)
library(reshape2)
# load rds
sce <- readRDS('ythdf123_final.rds')
unique(sce$orig.ident)
# [1] ST1 ST2 ST3 ST4 ST5 ST6 ST7 ST8 SPG1 SPG2 SPG3 INT1 INT2 INT3 INT4 INT5
# [17] SER1 SER2 SER3 SER4 SER5 SER6 SER7 SER8 INT6
# 25 Levels: INT1 INT2 INT3 INT4 INT5 INT6 SER1 SER2 SER3 SER4 SER5 SER6 SER7 ... ST8
# subset data
tmp <- subset(x = sce,subset = orig.ident == c('ST1','ST2','ST3','ST4'))
unique(tmp$orig.ident)
# [1] ST1 SPG1 INT1 SER1
# 25 Levels: INT1 INT2 INT3 INT4 INT5 INT6 SER1 SER2 SER3 SER4 SER5 SER6 SER7 ... ST8
默认的 Dimplot:
# dimplot
# umap
DimPlot(tmp, reduction = "umap",split.by = 'orig.ident') +
NoLegend()
或者 tsne:
# tsne
DimPlot(tmp, reduction = "tsne",split.by = 'orig.ident') +
NoLegend()
默认的 FeaturePlot:
# FeaturePlot
FeaturePlot(object = tmp,features = c("Actb","Ythdc1", "Ythdf2"),
split.by = 'orig.ident')
3Dimplot 美化
定义函数:
# define function
AddCornerAxes <- function(object,reduction = 'umap',nrow = 1,
relLength = 0.3,relDist = 0.07,
axes = 'mul',legendPos = 'right',
lineTextcol = 'black'){...}
参数解释:
object: seurat 对象名称。 reduction: 降维类型。 relLength: 坐标轴线的相对长度。 relDist: 轴标签离轴的距离。 nrow: 图的行数。 axes: 左下角的坐标轴类型, mul
为每个子图都添加,one
则第一个图添加。lineTextcol: 坐标轴字体和线的颜色。 legendPos: 图例的位置。
默认测试:
# test plot
# umap
AddCornerAxes(object = tmp,reduction = 'umap',
nrow = 1,legendPos = 'right',
relLength = 0.5,relDist = 0.15)
改变线的颜色:
# line color
AddCornerAxes(object = tmp,reduction = 'umap',
nrow = 1,legendPos = 'right',
relLength = 0.5,relDist = 0.15,
lineTextcol = 'grey50')
只添加一个坐标轴:
# one axes
AddCornerAxes(object = tmp,reduction = 'umap',
nrow = 1,legendPos = 'right',
relLength = 0.5,relDist = 0.15,
axes = 'one')
tsne,绘制两行:
# tsne
AddCornerAxes(object = tmp,reduction = 'tsne',
nrow = 2,legendPos = 'right',
relLength = 0.5,relDist = 0.15)
tsne 一行,一个坐标轴:
# one axes
AddCornerAxes(object = tmp,reduction = 'tsne',
nrow = 1,legendPos = 'right',
relLength = 0.5,relDist = 0.15,
axes = 'one')
4FeaturePlot enhanced
定义函数:
# define function
FeatureCornerAxes <- function(object,reduction = 'umap',features,
relLength = 0.3,relDist = 0.07,
low = 'lightgrey',high = 'red',
axes = 'mul',legendPos = 'right',
RowSample = 1,ColGene = 1,
lineTextcol = 'black'){...}
参数解释:
参数大部分和上面差不多:
features: 绘制的基因名。 low/high: 点的颜色。 RowSample: 按样本绘图的行数。 ColGene: 按基因绘图的行数。
测试:
# test plot
# umap
FeatureCornerAxes(object = tmp,reduction = 'umap',
legendPos = 'right',
features = c("Actb","Ythdc1", "Ythdf2"),
relLength = 0.5,relDist = 0.15,
RowSample = 1,ColGene = 1)
轴线颜色:
# line color
FeatureCornerAxes(object = tmp,reduction = 'umap',
legendPos = 'right',
features = c("Actb","Ythdc1", "Ythdf2"),
relLength = 0.5,relDist = 0.15,
RowSample = 1,ColGene = 1,
lineTextcol = 'grey50')
保留一个轴:
# one axes
FeatureCornerAxes(object = tmp,reduction = 'umap',
legendPos = 'right',
features = c("Actb","Ythdc1", "Ythdf2"),
relLength = 0.5,relDist = 0.15,
RowSample = 1,ColGene = 1,
axes = 'one')
tsne 的一个轴,改变点颜色:
# one axes
FeatureCornerAxes(object = tmp,reduction = 'tsne',
legendPos = 'right',
features = c("Actb","Ythdc1", "Ythdf2"),
relLength = 0.5,relDist = 0.15,
RowSample = 1,ColGene = 1,
high = '#009966',
axes = 'one')
如果想要更多的调整,也可以在函数里添加更多的参数来实现,按需修改即可。
5结尾
个人觉得保留一个坐标轴会更加简洁一些,在视觉上也不会有太多困扰,感谢 Y 叔的指正和建议!
微信发我 15 元, 我把代码和数据分享给你!
欢迎加入生信交流群。加我微信我也拉你进 微信群聊 老俊俊生信交流群
(微信交流群满200人后需收取20元入群费用)。
群二维码:
老俊俊微信:
知识星球:
所以今天你学习了吗?
今天的分享就到这里了,敬请期待下一篇!
最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!
如果觉得对您帮助很大,赏杯快乐水喝喝吧!
往期回顾
◀Molecular Cell 文章 ribosome pausing 结果复现 (终)
◀Molecular Cell 文章 ribosome pausing 结果复现 (四)
◀Molecular Cell 文章 ribosome pausing 结果复现 (三)
◀Molecular Cell 文章 ribosome pausing 结果复现 (二) (PCR 去重)
◀..